note
	description: "Summary description for {MIRAGE}."
	author: "Durand Alejandro - Santos Rodrigo"
	date: "$Date$"
	revision: "$Revision$"

class
	MIRAGE
	--Aviones usados por la armada argentina.

    create
       make

	feature{NONE}--Atributos privados

	   controlador : MC72--Mecanismo de control de misiles acoplado al avion.

	feature--Metodos publicos

		make
		--crea un nuevo MIRAGE
			do
				create controlador.make--creo el controlador del avion.
			end


       --Ataca al objetivo representado por la cadena dada.
		Atacar_Objetivo(Objetivo : STRING)
	   		local
	   			salto : BOOLEAN
	   			--Flag de salto en caso de que falle prepararMisil
	   			flag : INTEGER
	   			--Flags indicadores del tipo de falla que se produjo	   	
	   			intentos : INTEGER
	   			--cantidad de intentos fallidos de ApuntarMisil
	   		do
				io.putstring ("Mirage :: Atacar_Objetivo :: Intentando lanzamiento")
				io.new_line
	   			if(not salto)
	   			--Verifico si fallo la operacion prepararMisil
	   				then
	   	 		   		flag := 1
	   	    			if(intentos = 0)
	   	    				--si no ha sido anteriormente preparado se intenta su preparacion.
	   	    				then
	   	    					controlador.preparar_misil
	   	    			end
	   					flag := 2
	   	   				controlador.apuntar_misil (Objetivo)
	   	   				flag := 3
	   	   				controlador.lanzar_misil
        		end
        		if(not salto)
        			then
            			io.putstring("Mirage :: Atacar_Objetivo :: Lanzamiento exitoso")
            			io.new_line
            		else
           				io.putstring("Mirage :: Atacar_Objetivo :: Lanzamiento fallido")
           				io.new_line
         		end
        		--Si falla alguna operacion se ejecuta el rescue
	   		rescue

	   			if(flag = 1)
	   				then
	   					--preparar misil falla, entonces el ataque termina sin fallar
	   		    		salto := TRUE
	   		    	else
	   		    		if(flag = 2 and intentos < 5)
	   		    			--apuntar falla y se intento menos de 5 veces
	   		    			then
	   		    				io.putstring("Mirage :: Atacar_Objetivo :: Lanzamiento fallido, reintentando")
	   		    				io.new_line
	   		    				intentos := intentos + 1
	   		    				retry;
	   		 			end
	   		 	end
	   		 	--fallo lanzar misil o intente mas de 5 veces , falla la operacion 		    			 		    				
	   		 	io.putstring ("Mirage :: Atacar_Objetivo :: Lanzamiento fallido")
	   	end
end
